「XLAの初期化およびXLAハンドルの取得」の説明に従ってXLAを初期化し、xla_handleを取得した後、更新イベントを監視する表またはマテリアライズド・ビューを指定できます。
SYS.XLASUBSCRIPTIONS表を問い合せることによって、ブックマークをサブスクライブする表を確認できます。また、SYS.XLASUBSCRIPTIONSを使用すると、特定の表にサブスクライブしたブックマークを確認することもできます。
ttXlaTableStatusは、DDLイベントをすべてのブックマークにレポートします。DDLイベントには、CREATAB、DROPTAB、CREAIND、DROPIND、CREATVIEW、DROPVIEW、CREATSEQ、DROPSEQ、ADDCOLS、DRPCOLS、TRUNCATE、 SETTBLIおよびSETCOLIトランザクションが含まれています。ttXlaTableStatus は、表に対する挿入、更新および削除を、表にサブスクライブしたブックマークにのみレポートします。
ttXlaTableByName関数をコールして、指定した表またはマテリアライズド・ビューのシステム識別子およびユーザー識別子の両方を取得します。次に、ttXlaTableStatus関数をコールして、表またはマテリアライズド・ビューへの変更を監視するためにXLAを有効にします。
この例では、SCOTT.MYDATA表への変更を追跡します。
#define TABLE_OWNER "SCOTT"
#define TABLE_NAME "MYDATA"
SQLUBIGINT SYSTEM_TABLE_ID = 0;
SQLUBIGINT userID;
rc = ttXlaTableByName(xla_handle, TABLE_OWNER, TABLE_NAME,
&SYSTEM_TABLE_ID, &userID);
表の識別子を取得すると、ttXlaTableStatus関数を使用して、SCOTT.MYDATA表への変更を検出するためのXLA更新追跡を有効にできます。newstatusパラメータを0(ゼロ)以外の値に設定すると、指定した表に行われた変更がXLAによって追跡されます。
SQLINTEGER oldstatus;
SQLINTEGER newstatus = 1;
rc = ttXlaTableStatus(xla_handle, SYSTEM_TABLE_ID, 0,
&oldstatus, &newstatus);
oldstatusパラメータは、コール時の表のステータスを示す出力です。
ttXlaTableStatusでnewstatusをNULLにし、oldstatusのみを返すことによって、表の現行のXLAステータスを返すことができます。次に例を示します。
rc = ttXlaTableStatus(xla_handle, SYSTEM_TABLE_ID, 0,
&oldstatus, NULL);
if (oldstatus != 0)
printf("XLA is currently tracking changes to table %s.%s\n",
TABLE_OWNER, TABLE_NAME);
else
printf("XLA is not tracking changes to table %s.%s\n",
TABLE_OWNER, TABLE_NAME);